package com.zhiyou100.test.test01.reflect;

/**
 * @author yang
 * @className Demo01Class
 * @packageName com.zhiyou100.test.test01.reflect
 * @Description TODO 反射 测试 1 获取字节文件对象
 * @date 2020-08-06 09:38
 */
public class Demo01Class {
    public static void main(String[] args) throws ClassNotFoundException {

        // 获取一个类的字节码文件对象3 通过 Object 类的 getClass() 方法
        Student student = new Student();
        Class<? extends Student> class01 = student.getClass();
        System.out.println(class01);

        // 获取一个类的字节码文件对象3 通过 Class 类的静态成员 class
        Class<Student> class02 = Student.class;
        System.out.println(class02);

        // 获取一个类的字节码文件对象3 通过 Class 类的静态方法 forName ()
        Class<?> class03 = Class.forName("com.zhiyou100.test.test01.reflect.Student");
        System.out.println(class03);

        // class com.zhiyou100.test.test01.reflect.Student
        // class com.zhiyou100.test.test01.reflect.Student
        // class com.zhiyou100.test.test01.reflect.Student

        /*
        Class 类方法 1 创建对象
        T new Instance() 调用无参数的构造方法 创建对象

        Class 类方法 2 获取名字
        String getName() 获取类的全称 报名.类名
        String getSimpleName() 获取类的简称 类名

        Class 类方法 3 获取父类的接口/父类
        Class[] getInterfaces()  获取类实现的所有接口
        Class getSuperclass() 获取本类的父类

        Class 类方法 4 获取类上的注解    Annotation[]	getAnnotations()

         */


    }
}

class Student {
    public int b=11;
    private String s="123";
    public Student() {
        System.out.println("无参数的构造方法");
    }


    public Student(int b) {
        this.b = b;
        System.out.println("int b 构造方法执行了！！");
    }

    private Student(int b,int a){
        System.out.println("int b , int a 私有构造方法执行了！！！");
    }

    public Student(int i, char nan, String hehe, int i1) {

    }

    public int add(int a){
        return a+1;
    }

    @Override
    public String toString() {
        return "Student{" +
                "b=" + b +
                ", s='" + s + '\'' +
                '}';
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    public String getS() {
        return s;
    }

    public void setS(String s) {
        this.s = s;
    }
}
